PostgreSQL 高可用 keepalived需求
3 配置SSH 互信
Keepalived 需要配置 SSH 互信。
4 准备数据库环境(node1 )
4.1 创建探测表sr_delay
1、创建数据库 Keepalived。
2、创建表探测表 sr_delay,被 Keepalived 探测。
3、刷新 sr_delay 表的last_alive字段为当前探测时间。
4、这张表用来判断主备延迟情况,数据库故障切换时会用到这张表。
psql -U postgres -d testdb
CREATE USER keepalived PASSWORD 'keepalived' CONNECTION LIMIT 4 ;
CREATE DATABASE keepalived OWNER keepalived;
\c keepalived keepalived
CREATE TABLE sr_delay(id int4, last_alive timestamp(0) without time zone);
4.2 配置 pg_hba.conf
后续Keepalived会每隔指定时间探测 PostgreSQL 数据库存活,并且以Keepalived用户登录Keepalived数据库刷新这张表,
所以需要配置所有节点的 pg_hba.conf ,增加如下内容:
host keepalived keepalived 192.168.10.173/32 scram-sha-256
host keepalived keepalived 192.168.10.174/32 scram-sha-256
host keepalived keepalived 192.168.10.175/32 scram-sha-256
随后 pg_ctl reload
操作使配置生效。
4.3 创建函数和触发器
1、表 sr_delay 只允许写入一条记录。
2、此条记录不允许删。
3、可以通过触发器实现,如下所示:
4.3.1 创建函数cannot_delete
\c keepalived keepalived
CREATE FUNCTION cannot_delete ()
RETURNS trigger
LANGUAGE plpgsql AS $
BEGIN
RAISE EXCEPTION 'Table sr_delay Can Not Delete !';
END;
$;
4.3.2 创建 delete 触发器。
CREATE TRIGGER trigger_sr_delay_del
BEFORE DELETE ON sr_delay
FOR EACH ROW EXECUTE PROCEDURE cannot_delete() ;
4.3.3 创建 TRUNCATE 触发器
CREATE TRIGGER trigger_sr_delay_tru
BEFORE TRUNCATE ON sr_delay FOR STATEMENT EXECUTE PROCEDURE cannot_delete() ;
4.3.4 插入初始数据
INSERT INTO sr_delay VALUES(1,now()) ;